package cn.b.sky.common.exception;


/**
 * 支持国际化的异常基类
 * 
 * @author Admin
 * 
 */
public class ImeException extends RuntimeException {

  private static final long serialVersionUID = 1L;

  private String errorCode;

  private String[] parameters;


  private ImeException() {
  }

  private ImeException(String message, String errorCode) {
    super(message);
    this.setErrorCode(errorCode);
  }

  private ImeException(String errorCode, Throwable innerException) {
    super(innerException);
    this.setErrorCode(errorCode);
  }

  private ImeException(String message, String errorCode, Throwable innerException) {
    super(message, innerException);
    this.setErrorCode(errorCode);
  }

  private ImeException(String errorCode, String[] parameters) {
    this.setErrorCode(errorCode);
    this.setParameters(parameters);
  }
  
  private ImeException(Throwable innerException, String errorCode, String[] parameters) {
    super(innerException);
    this.setErrorCode(errorCode);
    this.setParameters(parameters);
  }

  /**
   * 根据错误码创建一个新的异常。
   * 
   * @param errorCode
   *            错误码
   * @param parameters
   *            参数值（默认为null）
   * @return
   */
  public static ImeException newException(String errorCode, String... parameters) {

    return new ImeException(errorCode, parameters);
  }
  
  /**
   * 根据错误码创建一个新的异常。
   * 
   * @param errorCode
   *            错误码
   * @param innerException
   * @param parameters
   *            参数值（默认为null）
   * @return
   */
  public static ImeException newException(Throwable innerException, String errorCode, String... parameters) {
    return new ImeException(innerException, errorCode, parameters);
  }

  /**
   * 根据错误码创建一个新的异常。
   * 
   * @param errorCode
   *            错误码
   * @param innerException
   *            内部异常原因
   * @param parameters
   *            参数值（默认为null）
   * @return
   */
  public static ImeException newException(String errorCode, Exception innerException) {

    return new ImeException(errorCode, innerException);
  }
  
  /**
   * 获取错误码
   * 
   * @return
   */
  public String getErrorCode() {
    return errorCode;
  }

  /**
   * 设置错误码
   * 
   * @param errorCode
   */
  public void setErrorCode(String errorCode) {
    this.errorCode = errorCode;
  }

  public String[] getParameters() {
    return parameters;
  }

  public void setParameters(String[] parameters) {
    this.parameters = parameters;
  }
  

  @Override
  public String toString() {
    return "errorCode: " + this.getErrorCode() + super.toString();
  }
}
